home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1993 July / Internet Tools.iso / RockRidge / ip / manage / snmp / kip / fp / cmdmacro.h < prev    next >
Encoding:
C/C++ Source or Header  |  1989-01-17  |  6.4 KB  |  241 lines

  1. /*
  2. **    Copyright (C) 1987 Kinetics, Inc.  All Rights Reserved.
  3. **    This program contains proprietary confidential information
  4. **    and trade secrets of Kinetics, Inc.  Reverse engineering
  5. **    of object code is prohibited.  Use of copyright notice
  6. **    is precautionary and does not imply publication.
  7. **
  8. **
  9. ** The PROM loader guarantees the following to be true when the
  10. ** downloaded program begins executing:
  11. **
  12. **    - CPU is in supervisor state,
  13. **    - Interrupt service is at level 7
  14. **    - 'sp' contains the address of the boot prom 'jump_table'
  15. **      defined below
  16. */
  17.  
  18. #include "fp3.0/cmdidx.h"    /* use the position dependent command
  19.                 ** indices for the X_nnn constants
  20.                 */
  21.  
  22. #define NUM_STACK 20
  23. #define NUM_ADDRS 64
  24. #define NUM_JUMPS 64
  25.  
  26. struct fp_table {
  27.     struct {
  28.         unsigned short opcode;
  29.         unsigned long dst_addr;
  30.         } jump_table[NUM_JUMPS];
  31.  
  32.     int (*subr_table[NUM_ADDRS])();
  33. };
  34.  
  35. extern struct fp_table *table_ptr;
  36.  
  37. #define    K_VERSION(a)    table_ptr->subr_table[X_VERSION](a)
  38. #define    K_EXECUTE()    table_ptr->subr_table[X_EXECUTE]()
  39. #define    K_ACK()        table_ptr->subr_table[X_ACK]()
  40. #define    K_REBOOT()    table_ptr->subr_table[X_REBOOT]()
  41. #define    K_SET68()    table_ptr->subr_table[X_SET68]()
  42. #define    K_SET86(a)    table_ptr->subr_table[X_SET86](a)
  43. #define    K_ATINIT(a)    table_ptr->subr_table[X_ATINIT](a)
  44. #define    K_ATWRITE(a)    table_ptr->subr_table[X_ATWRITE](a)
  45. #define    K_WAIT(a)    table_ptr->subr_table[X_WAIT](a)
  46. #define    K_WHEREIS(a)    table_ptr->subr_table[X_WHEREIS](a)
  47. #define    K_GETMEM(a)    table_ptr->subr_table[X_GETMEM](a)
  48. #define    K_PROTECT(a)    table_ptr->subr_table[X_PROTECT](a)
  49. #define    K_COPYMEM(a)    table_ptr->subr_table[X_COPYMEM](a)
  50. #define    K_CLRMEM(a)    table_ptr->subr_table[X_CLRMEM](a)
  51. #define    K_PROMRAM(a)    table_ptr->subr_table[X_PROMRAM](a)
  52. #define    K_RESET()    table_ptr->subr_table[X_RESET]()
  53. #define    K_USER0(a)    table_ptr->subr_table[X_USER0](a)
  54. #define    K_USER1(a)    table_ptr->subr_table[X_USER1](a)
  55. #define    K_USER2(a)    table_ptr->subr_table[X_USER2](a)
  56. #define    K_USER3(a)    table_ptr->subr_table[X_USER3](a)
  57. #define    K_USER4(a)    table_ptr->subr_table[X_USER4](a)
  58. #define    K_USER5(a)    table_ptr->subr_table[X_USER5](a)
  59. #define    K_USER6(a)    table_ptr->subr_table[X_USER6](a)
  60. #define    K_USER7(a)    table_ptr->subr_table[X_USER7](a)
  61. #define    K_BUFINIT(a)    table_ptr->subr_table[X_BUFINIT](a)
  62. #define    K_BUFGET(a)    table_ptr->subr_table[X_BUFGET](a)
  63. #define    K_BUFFREE(a)    table_ptr->subr_table[X_BUFFREE](a)
  64. #define    K_BUFENQ(a)    table_ptr->subr_table[X_BUFENQ](a)
  65. #define    K_BUFDEQ(a)    table_ptr->subr_table[X_BUFDEQ](a)
  66. #define    K_ERR()        table_ptr->subr_table[X_ERR]()
  67. #define    K_IDLE()    table_ptr->subr_table[X_IDLE]()
  68. #define    K_KLAP(a)    table_ptr->subr_table[X_KLAP](a)
  69. #define    K_WHO()        table_ptr->subr_table[X_WHO]()
  70. #define    K_CA86()    table_ptr->subr_table[X_CA86]()
  71. #define    K_RES86()    table_ptr->subr_table[X_RES86]()
  72. #define    K_CLRINT()    table_ptr->subr_table[X_CLRINT]()
  73. #define    K_RCSID(a)    table_ptr->subr_table[X_RCSID](a)
  74. #define    K_EXPROM()    table_ptr->subr_table[X_EXPROM]()
  75. #define    K_INIPROM()    table_ptr->subr_table[X_INIPROM]()
  76. #define    K_RES8530()    table_ptr->subr_table[X_RES8530]()
  77. #define    K_DMTSERV()    table_ptr->subr_table[X_DMTSERV]()
  78. #define    K_SREC(a)    table_ptr->subr_table[X_SREC](a)
  79. #define    K_SPL(a)    table_ptr->subr_table[X_SPL](a)
  80. #define    K_LED(a)    table_ptr->subr_table[X_LED](a)
  81. #define    K_RAND(a)    table_ptr->subr_table[X_RAND](a)
  82. #define    K_CMPMEM(a)    table_ptr->subr_table[X_CMPMEM](a)
  83. #define    K_SENDF(a)    table_ptr->subr_table[X_SENDF](a)
  84. #define    K_MEMSEG(a)    table_ptr->subr_table[X_MEMSEG](a)
  85. #define    K_MALLOC(a)    table_ptr->subr_table[X_MALLOC](a)
  86. #define    K_FREE(a)    table_ptr->subr_table[X_FREE](a)
  87. #define    K_NOTIMP()    table_ptr->subr_table[X_NOTIMP]()
  88.  
  89. /* macros for memory operations */
  90. #define    K_BCOPY(addr1,addr2,cnt) { \
  91.     struct fp_copy ab; \
  92.     ab.fpc_from = (char *)(addr1); \
  93.     ab.fpc_to = (char *)(addr2); \
  94.     ab.fpc_count = (unsigned short)(cnt); \
  95.     K_COPYMEM(&ab); \
  96. }
  97.  
  98. #define    K_BZERO(addr,cnt) { \
  99.     struct fp_mem ab; \
  100.     ab.fpm_count = (unsigned short)(cnt); \
  101.     ab.fpm_memp = (char *)(addr); \
  102.     K_CLRMEM(&ab); \
  103. }
  104.  
  105. #define    K_BCMP(rv,addr1,addr2,cnt) { \
  106.     struct fp_copy ab; \
  107.     ab.fpc_from = (char *)(addr1); \
  108.     ab.fpc_to = (char *)(addr2); \
  109.     ab.fpc_count = (unsigned short)(cnt); \
  110.     K_CMPMEM(&ab); \
  111.     (rv) = (int)ab.fpc_count; \
  112. }
  113.  
  114. /* macros for buffer operations */
  115. #define    K_PGET(type,buf) { \
  116.     struct fp_bget bg; \
  117.     bg.fpg_type = (type); \
  118.     K_BUFGET(&bg); \
  119.     (buf) = bg.fpg_buf; \
  120. }
  121.  
  122. #define    K_PFREE(buf) { \
  123.     struct fp_bfree bf; \
  124.     bf.fpf_buf = (buf); \
  125.     K_BUFFREE(&bf); \
  126. }
  127.  
  128. #define    K_PFREEN(buf,nxt) { \
  129.     struct fp_bfree bf; \
  130.     bf.fpf_buf = (buf); \
  131.     K_BUFFREE(&bf); \
  132.     (nxt) = bf.fpf_nxt; \
  133. }
  134.  
  135. #define    K_PENQ(level,head,buf) { \
  136.     struct fp_bqueue bq; \
  137.     short pr; \
  138.     bq.fpq_q = (head); \
  139.     bq.fpq_buf = (buf); \
  140.     pr = (level); \
  141.     K_SPL(&pr);     \
  142.     K_BUFENQ(&bq); \
  143.     K_SPLX(&pr); \
  144. }
  145.  
  146. #define    K_PENQNP(head,buf) { \
  147.     struct fp_bqueue bq; \
  148.     bq.fpq_q = (head); \
  149.     bq.fpq_buf = (buf); \
  150.     K_BUFENQ(&bq); \
  151. }
  152.  
  153. #define    K_PDEQ(level,head,buf) { \
  154.     struct fp_bqueue bq; \
  155.     short pr; \
  156.     bq.fpq_q = (head); \
  157.     pr = (level); \
  158.     K_SPL(&pr);     \
  159.     K_BUFDEQ(&bq); \
  160.     K_SPL(&pr); \
  161.     (buf) = bq.fpq_buf; \
  162. }
  163.  
  164. #define    K_PDEQNP(head,buf) { \
  165.     struct fp_bqueue bq; \
  166.     bq.fpq_q = (head); \
  167.     K_BUFDEQ(&bq); \
  168.     (buf) = bq.fpq_buf; \
  169. }
  170.  
  171. /* macros for various spl options */
  172. #define SPL0    0x2000
  173. #define SPLIE    0x2200
  174. #define SPLABUS    0x2500
  175. #define SPLIMP    0x2700
  176.  
  177. #define    K_SPL0(a) { \
  178.     *(a) = SPL0; \
  179.     K_SPL(a); \
  180. }
  181.  
  182. #define    K_SPLIE(a) { \
  183.     *(a) = SPLIE; \
  184.     K_SPL(a); \
  185. }
  186. #define    K_SPLABUS(a) { \
  187.     *(a) = SPLABUS; \
  188.     K_SPL(a); \
  189. }
  190.  
  191. #define    K_SPLIMP(a) { \
  192.     *(a) = SPLIMP; \
  193.     K_SPL(a); \
  194. }
  195.  
  196. #define    K_SPLX(a) { \
  197.     K_SPL(a); \
  198. }
  199.  
  200. /* macros for led calls */
  201. #define    K_LEDON() { \
  202.     struct fp_led fpl; \
  203.     fpl.fpl_leds = 0; /* currently not used (only one led) */ \
  204.     fpl.fpl_state = LED_ON; \
  205.     K_LED(&fpl); \
  206. }
  207.  
  208. #define    K_LEDOFF() { \
  209.     struct fp_led fpl; \
  210.     fpl.fpl_leds = 0; /* currently not used (only one led) */ \
  211.     fpl.fpl_state = LED_OFF; \
  212.     K_LED(&fpl); \
  213. }
  214.  
  215. #define    K_LEDTOGGLE() { \
  216.     struct fp_led fpl; \
  217.     fpl.fpl_leds = 0; /* currently not used (only one led) */ \
  218.     fpl.fpl_state = LED_TOGGLE; \
  219.     K_LED(&fpl); \
  220. }
  221.  
  222. #define    MEMSEG(cast_type,kcp,kss) { \
  223.     struct fp_malloc xyz0; \
  224.     xyz0.fpo_parm.fpo_size = (kss); \
  225.     K_MEMSEG(&xyz0); \
  226.     (kcp) = (cast_type)xyz0.fpo_parm.fpo_area; \
  227. }
  228.  
  229. #define    MALLOC(cast_type,kcp,kss) { \
  230.     struct fp_malloc xyz0; \
  231.     xyz0.fpo_parm.fpo_size = (kss); \
  232.     K_MALLOC(&xyz0); \
  233.     (kcp) = (cast_type)xyz0.fpo_parm.fpo_area; \
  234. }
  235.  
  236. #define    FREE(kcp) { \
  237.     struct fp_malloc xyz0; \
  238.     xyz0.fpo_parm.fpo_area = (unsigned char *)(kcp); \
  239.     K_FREE(&xyz0); \
  240. }
  241.